/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package inteligenciaartificial;

import java.util.EnumMap;
import java.util.Map;

/**
 *
 * @author Fer
 */
public class Settings {
  //valores por defecto para restricciones de materia prima usada por productos
    public static  Intervalo[] intervalosProducto;
    
    //valores por defecto para la utilidad de cada producto
    public static  int[] utilidades;
    
    //valor por defecto para cantidad de generaciones maxima
    public static  int cantidadGeneraciones;
    
    //valor por defecto para numero de individuos por generacion
     public static  int totalPoblacion;
    
     //valores por defecto parametros mutador
    public static  double pm;
    public static  double pM;
    public static  double lambda;
    
    //porcentaje de aceptacion de individuo
    public static double porcentajeDeAceptacion;
    
    //numero de generaciones maxima sin cambiar la utilidad maxima
     public static int objectivoGeneraciones;
    
    public static  Map <Individuo.Operador,Integer> algoritmosGeneticos= new EnumMap<Individuo.Operador,Integer>(Individuo.Operador.class); 
     
    public static void inicializar(){
       
            Defaults.inicializar();
            defaultConfiguracionAlgoritmos();
            defaultConfiguracionProducto();
         
    }
    
    public static void defaultConfiguracionAlgoritmos(){
            cantidadGeneraciones= Defaults.cantidadGeneraciones;
            totalPoblacion= Defaults.totalPoblacion;
            porcentajeDeAceptacion= Defaults.porcentajeDeAceptacion;
            objectivoGeneraciones= Defaults.objectivoGeneraciones;
            
            pm= Defaults.pm;
            pM=Defaults.pM;
            lambda=Defaults.lambda;

            //obtengo todos los operadores y recorro, si un operador esta en defaults lo agrego a settings
            Individuo.Operador[] operadores= Individuo.Operador.values();
            
            Map <Individuo.Operador,Integer> algoritmos = Defaults.algoritmosGeneticos;
             
            for(int i=0;i<operadores.length;i++){
                Individuo.Operador operador=operadores[i];
                 if(algoritmos.containsKey(operador)){
                     algoritmosGeneticos.put(operador, algoritmos.get(operador));
                 }     
            }
    }
    
   public static void defaultConfiguracionProducto(){
        intervalosProducto= new Intervalo[Defaults.intervalosProducto.length];
            
            for(int i=0;i<intervalosProducto.length;i++){
                if(i!=0 && i!=9 && i!=18 &&i!=27) {
                    intervalosProducto[i]= new Intervalo(Defaults.intervalosProducto[i].getMinimo(),Defaults.intervalosProducto[i].getMaximo());
                }
            }
            
            //intervalosProducto= Defaults.intervalosProducto.clone();
            utilidades= Defaults.utilidades.clone();
    }
   
   public static void limpiarAlgoritmosGeneticos(){
       algoritmosGeneticos= new EnumMap<Individuo.Operador,Integer>(Individuo.Operador.class);
   }
   
   public static void agregarAlgoritmoGenetico(Individuo.Operador operador, int porcentaje){
      algoritmosGeneticos.put(operador, porcentaje);
   }
}
